package com.yida.gwj.deposit.mapper;

import com.yida.gwj.deposit.domain.GwjDepositBusinessHouse;
import com.yida.gwj.deposit.domain.dto.GwjDepositBusinessHouseListDTO;
import com.yida.gwj.deposit.domain.dto.split.GwjFundsSplitBusinessHouseDTO;
import com.yida.gwj.deposit.domain.dto.refund.GwjRefundCompleteHouseDetailDTO;
import com.yida.gwj.deposit.domain.request.split.GwjFundsSplitBusinessHouseRequest;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 业务房屋信息（缴存业务管理模块）Mapper接口
 *
 * @author lqq
 * @date 2023-01-10
 */
public interface GwjDepositBusinessHouseMapper {
	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizHouseId 业务房屋信息（缴存业务管理模块）主键
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	public GwjDepositBusinessHouse selectGwjDepositBusinessHouseByBizHouseId(Long bizHouseId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	public List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseList(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 新增业务房屋信息（缴存业务管理模块）
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 结果
	 */
	public int insertGwjDepositBusinessHouse(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 修改业务房屋信息（缴存业务管理模块）
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 结果
	 */
	public int updateGwjDepositBusinessHouse(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizHouseId 业务房屋信息（缴存业务管理模块）主键
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizHouseId(Long bizHouseId);

	/**
	 * 删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizIdAndBuildCode(@Param("bizId") Long bizId, @Param("buildCode") String buildCode);

	/**
	 * 批量删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizHouseIds 需要删除的数据主键集合
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizHouseIds(Long[] bizHouseIds);

	/**
	 * 通过业务ID删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizId 业务ID
	 * @return 结果
	 */
	int deleteGwjDepositBusinessHouseByBizId(Long bizId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表 含楼栋信名称、业主名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseDetailList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表 含业主名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithOwnerNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表 含楼栋信名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithBuildNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表 含楼栋信名称、计算标准名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithBuildNameAndCalculateNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 根据业务ID和楼栋标识码统计预测面积
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	BigDecimal countForecastSizeByBizIdAndBuildCodes(@Param("bizId") Long bizId, @Param("buildCodes") String[] buildCode);

	/**
	 * 根据业务ID和楼栋标识码统计实测面积
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	BigDecimal countActualSizeByBizIdAndBuildCodes(@Param("bizId") Long bizId, @Param("buildCodes") String[] buildCode);

	/**
	 * 根据业务ID和楼栋标识码统计总面积
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	BigDecimal countTotalSizeByBizIdAndBuildCodes(@Param("bizId") Long bizId, @Param("buildCodes") String[] buildCode);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表 含楼栋信名称、业主名称
	 *
	 * @param bizId      业务ID
	 * @param buildCodes 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIdAndBuildCode(@Param("bizId") Long bizId, @Param("buildCodes") String[] buildCodes);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param houseId 房屋信息（缴存业务管理模块）主键
	 * @param bizId   业务ID
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	GwjDepositBusinessHouse selectGwjDepositBusinessHouseByHouseIdAndBizId(@Param("houseId") Long houseId, @Param("bizId") Long bizId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param houseCode 房屋信息（缴存业务管理模块）标识码
	 * @param bizId   业务ID
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	GwjDepositBusinessHouse selectGwjDepositBusinessHouseByHouseCodeAndBizId(@Param("houseCode") String houseCode, @Param("bizId") Long bizId);

	/**
	 * 批量信息房屋信息
	 * @param houseList 房屋信息
	 * @return
	 */
	Long insertGwjDepositBusinessHouses(@Param("houses") List<GwjDepositBusinessHouse> houseList);

    List<GwjRefundCompleteHouseDetailDTO> listBizHouseDTO(@Param("bizId") Long bizId, @Param("buildCode") String buildCode);

	/**
	 * 查询资金分户列表
	 * @param gwjDepositBusinessHouse
	 * @return
	 */
	List<GwjDepositBusinessHouseListDTO> selectGwjDepositBusinessHousePage(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 计算资金分页总数
	 * @param gwjDepositBusinessHouse
	 * @return
	 */
	Long countTotalSize(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 根据业务房屋主键查询业务参数
	 * @param bizHouseIds 业务房屋主键
	 * @return
	 */
    List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIds(@Param("bizHouseIds") Long[] bizHouseIds);
}
